package com.lmf.juc.Lock.case4;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 演示多线程之间不安全的解决方法：
 *      1.利用Vector集合实现，底层实质使用 synchronized 同步锁实现
 *      2.利用 Collections 集合中的工具类：即，其中的静态方法 synchronizedList()
 *      3.CopyOnWriteArrayList集合实现，这个集合底层使用了 “写时复制技术”
 * 注意： 多线程高并发中，利用ArrayList()：线程不安全。
 */
public class ThreadDemo2 {
    public static void main(String[] args) {
        /**
         *  注意： ArrayList()：线程不安全。
         *   （即，当出现多线程高并发，同时去arrayList集合中，进行读取写入操作时，就会发生并发修改异常）
         */
//        List<String> list = new ArrayList<>();

        /**
         * 方法一：利用Vector集合实现，底层实质使用 synchronized 同步锁实现
         */
//        Vector<String> list = new Vector<>();

        /**
         * 方法二：利用 Collections 集合中的工具类：即，其中的静态方法 synchronizedList()
         */
//        List<String> list = Collections.synchronizedList(new ArrayList<>());

        /**
         * 方法三：CopyOnWriteArrayList集合实现，这个集合底层使用了 “写时复制技术”
         */
        List<String> list = new CopyOnWriteArrayList<>();
        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                 String id = UUID.randomUUID().toString().substring(0,8);
                list.add(id);
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}
